Check if the accessible is actually an AtkAction
authorMatthias Clasen <mclasen@redhat.com>
Thu, 17 Feb 2011 18:29:59 +0000 (13:29 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 17 Feb 2011 18:29:59 +0000 (13:29 -0500)
gtk/gtkwidget.c

index b2e3572c61c52eaed427085a85e5ed303f7fe0cb..84903a3bcc0c83e0adec0acfe8e0fb0a63aaedd7 100644 (file)
@@ -12882,32 +12882,37 @@ gtk_widget_buildable_custom_finished (GtkBuildable *buildable,
 
          accessible = gtk_widget_get_accessible (GTK_WIDGET (buildable));
 
-         action = ATK_ACTION (accessible);
-         n_actions = atk_action_get_n_actions (action);
-
-         for (l = a11y_data->actions; l; l = l->next)
-           {
-             AtkActionData *action_data = (AtkActionData*)l->data;
-
-             for (i = 0; i < n_actions; i++)
-               if (strcmp (atk_action_get_name (action, i),
-                           action_data->action_name) == 0)
-                 break;
-
-             if (i < n_actions)
-                {
-                  gchar *description;
-
-                  if (action_data->translatable && action_data->description->len)
-                    description = _gtk_builder_parser_translate (gtk_builder_get_translation_domain (builder),
-                                                                 action_data->context,
-                                                                 action_data->description->str);
-                  else
-                    description = action_data->description->str;
-
-                 atk_action_set_description (action, i, description);
+          if (ATK_IS_ACTION (accessible))
+            {
+             action = ATK_ACTION (accessible);
+             n_actions = atk_action_get_n_actions (action);
+
+             for (l = a11y_data->actions; l; l = l->next)
+               {
+                 AtkActionData *action_data = (AtkActionData*)l->data;
+
+                 for (i = 0; i < n_actions; i++)
+                   if (strcmp (atk_action_get_name (action, i),
+                               action_data->action_name) == 0)
+                     break;
+
+                 if (i < n_actions)
+                    {
+                      gchar *description;
+
+                      if (action_data->translatable && action_data->description->len)
+                        description = _gtk_builder_parser_translate (gtk_builder_get_translation_domain (builder),
+                                                                     action_data->context,
+                                                                     action_data->description->str);
+                      else
+                        description = action_data->description->str;
+
+                     atk_action_set_description (action, i, description);
+                    }
                 }
            }
+          else
+            g_warning ("accessibility action on a widget that does not implement AtkAction");
 
          g_slist_foreach (a11y_data->actions, (GFunc)free_action, NULL);
          g_slist_free (a11y_data->actions);